package com.grape.juc.safe.reorder;
/**
 * 描述:重排序问题
 * @author: myx
 * @date: 2019-05-08
 * Copyright © 2019-grape. All rights reserved.
 */
class ReorderExample {
    int a = 0;
    boolean flag = false;

    /**
     * 写入线程
     */
    public void writer() {
        a = 1; //1
        flag = true;//2
    }

    /**
     * 多线程程序中writer()和reader()被不同线程同时执行
     * 1行代码和2行代码没有任何依赖关系，可能会做重排序，假设做了重排序int i = a * a结果会错误
     * 解决办法volatile int a = 0;  volatile boolean flag = false;
     */
    public void reader() {
        if (flag) {//3
            int i = a * a;//4
        }
    }
}